// サーバープログラム
import java.io.* ;
import java.util.* ;
import java.net.* ;
class UserInfo {
} ;
public class ChatSv {
public static void main
( String [ ] args
) { int i, n = - 1 ;
byte [ ] buf = new byte [ ChatParam.MSIZE ] , cbuf;
UserInfo[ ] users = new UserInfo[ ChatParam.MAX_USERS ] ;
boolean flag;
for ( i = 0 ; i < ChatParam.MAX_USERS ; i++ ) {
users[ i] = new UserInfo( ) ;
users[ i] .sock = null ;
}
try {
/* クライアントからの接続待ち準備 */
while ( true ) {
/* クライアントからの接続受け付け */
for ( i = 0 ; i < ChatParam.MAX_USERS ; i++ ) {
if ( users[ i] .sock == null ) {
// まだ最大人数に達していないので参加OK
users[ i] .sock = asock;
users[ i] .is = asock.getInputStream ( ) ;
users[ i] .os = asock.getOutputStream ( ) ;
break ;
}
}
if ( i < ChatParam.MAX_USERS ) {
/* 接続してきたクライアントに参加OKを伝える */
/* すでに参加しているクライアントに新しい参加者を伝える */
buf[ 0 ] = ChatParam.JOIN ;
cbuf = ( users[ i] .name + "さんが加わりました\0 " ) .getBytes ( ) ;
System .
arraycopy ( cbuf,
0 , buf,
1 , cbuf.
length ) ; }
else {
/* すでに最大人数に達しているので参加不可をクライアントに伝えて
切断処理を行う */
}
// 少なくともこれ以降のクライアントとの通信は並列に行う必要あり
// (新たな参加者受け付けと参加済みのクライアントからのメッセージ
// 受信は順序が決まっていないため)
/* ある参加者からメッセージが送信されてきたら、それ以外の参加者に
そのメッセージを転送する */
/* 誰かが抜けた(接続が切れた)場合には他の参加者に抜けたことを伝える */
buf[ 0 ] = ChatParam.LEAVE ;
cbuf = ( users[ n] .name + "さんが抜けました\0 " ) .getBytes ( ) ;
System .
arraycopy ( cbuf,
0 , buf,
1 , cbuf.
length ) ; }
}
/* 通信終了処理(上が無限ループなので意味はないが) */
}
}
Ly8g44K144O844OQ44O844OX44Ot44Kw44Op44OgCiAKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5uZXQuKjsKIApjbGFzcyBVc2VySW5mbyB7CglTb2NrZXQgc29jazsKCUlucHV0U3RyZWFtIGlzOwoJT3V0cHV0U3RyZWFtIG9zOwoJU3RyaW5nIG5hbWU7Cn07CiAKcHVibGljIGNsYXNzIENoYXRTdiB7CiAKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICBTZXJ2ZXJTb2NrZXQgc3NvY2s7CiAgICBTb2NrZXQgYXNvY2sgPSBudWxsOwogICAgaW50ICBpLCBuID0gLTE7CiAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbQ2hhdFBhcmFtLk1TSVpFXSwgY2J1ZjsKICAgIFVzZXJJbmZvW10gdXNlcnMgPSBuZXcgVXNlckluZm9bQ2hhdFBhcmFtLk1BWF9VU0VSU107CiAgICBib29sZWFuIGZsYWc7CiAgICBTdHJpbmcgc3RyOwogCiAgICBmb3IgKGkgPSAwOyBpIDwgQ2hhdFBhcmFtLk1BWF9VU0VSUzsgaSsrKSB7CgkJdXNlcnNbaV0gPSBuZXcgVXNlckluZm8oKTsKCQl1c2Vyc1tpXS5zb2NrID0gbnVsbDsKICAgIH0KIAogICAgdHJ5IHsKIAoJCS8qIOOCr+ODqeOCpOOCouODs+ODiOOBi+OCieOBruaOpee2muW+heOBoea6luWCmSAqLwogCgkJd2hpbGUgKHRydWUpIHsKIAoJCQkvKiDjgq/jg6njgqTjgqLjg7Pjg4jjgYvjgonjga7mjqXntprlj5fjgZHku5jjgZEgKi8KIAoJCQlmb3IgKGkgPSAwOyBpIDwgQ2hhdFBhcmFtLk1BWF9VU0VSUzsgaSsrKSB7CgkJCSAgaWYgKHVzZXJzW2ldLnNvY2sgPT0gbnVsbCkgewoJCQkgICAgLy8g44G+44Gg5pyA5aSn5Lq65pWw44Gr6YGU44GX44Gm44GE44Gq44GE44Gu44Gn5Y+C5YqgT0sKCQkJICAgIHVzZXJzW2ldLnNvY2sgPSBhc29jazsKCQkJICAgIHVzZXJzW2ldLmlzID0gYXNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKCQkJICAgIHVzZXJzW2ldLm9zID0gYXNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CgkJCSAgICBicmVhazsKCQkJICB9CgkJCX0KIAoJCQlpZiAoaSA8IENoYXRQYXJhbS5NQVhfVVNFUlMpIHsKCQkJICAvKiDmjqXntprjgZfjgabjgY3jgZ/jgq/jg6njgqTjgqLjg7Pjg4jjgavlj4LliqBPS+OCkuS8neOBiOOCiyAqLwogCgkJCSAgLyog44GZ44Gn44Gr5Y+C5Yqg44GX44Gm44GE44KL44Kv44Op44Kk44Ki44Oz44OI44Gr5paw44GX44GE5Y+C5Yqg6ICF44KS5Lyd44GI44KLICovCgkJCSAgICBidWZbMF0gPSBDaGF0UGFyYW0uSk9JTjsKCQkJICAgIGNidWYgPSAodXNlcnNbaV0ubmFtZSArICLjgZXjgpPjgYzliqDjgo/jgorjgb7jgZfjgZ9cMCIpLmdldEJ5dGVzKCk7CgkJCQlTeXN0ZW0uYXJyYXljb3B5KGNidWYsIDAsIGJ1ZiwgMSwgY2J1Zi5sZW5ndGgpOwoJCQl9CgkJCWVsc2UgeyAKCQkJICAvKiDjgZnjgafjgavmnIDlpKfkurrmlbDjgavpgZTjgZfjgabjgYTjgovjga7jgaflj4LliqDkuI3lj6/jgpLjgq/jg6njgqTjgqLjg7Pjg4jjgavkvJ3jgYjjgaYKCQkJICAgICDliIfmlq3lh6bnkIbjgpLooYzjgYYgKi8KIAoJCQl9CiAKCQkJLy8g5bCR44Gq44GP44Go44KC44GT44KM5Lul6ZmN44Gu44Kv44Op44Kk44Ki44Oz44OI44Go44Gu6YCa5L+h44Gv5Lim5YiX44Gr6KGM44GG5b+F6KaB44GC44KKCgkJCS8vICjmlrDjgZ/jgarlj4LliqDogIXlj5fjgZHku5jjgZHjgajlj4LliqDmuIjjgb/jga7jgq/jg6njgqTjgqLjg7Pjg4jjgYvjgonjga7jg6Hjg4Pjgrvjg7zjgrgKCQkJLy8g5Y+X5L+h44Gv6aCG5bqP44GM5rG644G+44Gj44Gm44GE44Gq44GE44Gf44KBKQogCgkJCS8qIOOBguOCi+WPguWKoOiAheOBi+OCieODoeODg+OCu+ODvOOCuOOBjOmAgeS/oeOBleOCjOOBpuOBjeOBn+OCieOAgeOBneOCjOS7peWkluOBruWPguWKoOiAheOBqwoJCQkgICDjgZ3jga7jg6Hjg4Pjgrvjg7zjgrjjgpLou6LpgIHjgZnjgosgKi8KIAoJCQkvKiDoqrDjgYvjgYzmipzjgZHjgZ8o5o6l57aa44GM5YiH44KM44GfKeWgtOWQiOOBq+OBr+S7luOBruWPguWKoOiAheOBq+aKnOOBkeOBn+OBk+OBqOOCkuS8neOBiOOCiyAqLwoJCQlidWZbMF0gPSBDaGF0UGFyYW0uTEVBVkU7CgkJCWNidWYgPSAodXNlcnNbbl0ubmFtZSArICLjgZXjgpPjgYzmipzjgZHjgb7jgZfjgZ9cMCIpLmdldEJ5dGVzKCk7CgkJCVN5c3RlbS5hcnJheWNvcHkoY2J1ZiwgMCwgYnVmLCAxLCBjYnVmLmxlbmd0aCk7CiAgICAJfQogICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImVycm9yIik7CgkJU3lzdGVtLmV4aXQoMSk7CiAgICB9CiAKICAgIC8qIOmAmuS/oee1guS6huWHpueQhijkuIrjgYznhKHpmZDjg6vjg7zjg5fjgarjga7jgafmhI/lkbPjga/jgarjgYTjgYwpICovCiAgfQp9
compilation info
Main.java:14: error: class ChatSv is public, should be declared in a file named ChatSv.java
public class ChatSv {
^
Main.java:20: error: cannot find symbol
byte[] buf = new byte[ChatParam.MSIZE], cbuf;
^
symbol: variable ChatParam
location: class ChatSv
Main.java:21: error: cannot find symbol
UserInfo[] users = new UserInfo[ChatParam.MAX_USERS];
^
symbol: variable ChatParam
location: class ChatSv
Main.java:25: error: cannot find symbol
for (i = 0; i < ChatParam.MAX_USERS; i++) {
^
symbol: variable ChatParam
location: class ChatSv
Main.java:38: error: cannot find symbol
for (i = 0; i < ChatParam.MAX_USERS; i++) {
^
symbol: variable ChatParam
location: class ChatSv
Main.java:48: error: cannot find symbol
if (i < ChatParam.MAX_USERS) {
^
symbol: variable ChatParam
location: class ChatSv
Main.java:52: error: cannot find symbol
buf[0] = ChatParam.JOIN;
^
symbol: variable ChatParam
location: class ChatSv
Main.java:70: error: cannot find symbol
buf[0] = ChatParam.LEAVE;
^
symbol: variable ChatParam
location: class ChatSv
8 errors
stdout