Advertisement
tomikankkunen84

Irc client by cujo

Dec 15th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.27 KB | None | 0 0
  1. Irc client by cujo
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. public class Irc implements Runnable
  6. {
  7. BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  8. InputStream in;
  9. OutputStream out;
  10. PrintWriter out2;
  11. String mode,mode2,rivi,rivis,rivig,rivin,rivitemp,rivi2,rivi2s,rivi2n,rivi2temp,chan,schan,rchan="<>";
  12. int sendaa=1,tulosta=1;
  13. String temp,rname,nick,ircserver;
  14. int i,j,port,luku;
  15. public static void main(String args[]) throws Exception
  16. {
  17. new Irc(args);
  18. }
  19. public String rivi()
  20. {
  21. String arvo=null;
  22. boolean ok;
  23. do
  24. {
  25. try
  26. {
  27. arvo = stdin.readLine();
  28. ok = true;
  29. }
  30. catch (Exception e)
  31. {
  32. System.out.println("Error reading string, give new one.");
  33. ok = false;
  34. }
  35. }
  36. while (!ok);
  37. return arvo;
  38. }
  39. public Irc(String args[]) throws Exception
  40. {
  41. System.out.print("Basic irc client 4 java by cujo.\n");
  42. System.out.print("\nNickname (enter=randomXXX): ");
  43. temp=rivi();
  44. if (temp.equals(""))
  45. {
  46. luku=(int)(Math.random()*999);
  47. nick="random"+luku;
  48. }
  49. else nick=temp;
  50. System.out.print("Realname (enter=noneed2know): ");
  51. temp=rivi();
  52. if (temp.equals("")) rname="noneed2know";
  53. else rname=temp;
  54. System.out.print("Ircserver (enter=irc.cs.hut.fi): ");
  55. temp=rivi();
  56. if (temp.equals("")) ircserver="irc.cs.hut.fi";
  57. else ircserver=temp;
  58. System.out.print("Port (enter=6667): ");
  59. temp=rivi();
  60. if (temp.equals("")) port=6667;
  61. else port=Integer.parseInt(temp);
  62. System.out.println("\nConnecting to "+ircserver+":"+port+" with nick "+nick+".");
  63. Socket server = new Socket(ircserver, port);
  64. in = server.getInputStream();
  65. out = server.getOutputStream();
  66. out2 = new PrintWriter(server.getOutputStream(), true);
  67. out2.println("NICK "+nick);
  68. out2.flush();
  69. out2.println("USER "+nick+" 8 * :"+rname);
  70. out2.flush();
  71. new Thread(this, "User").start();
  72. new Thread(this, "Server").start();
  73. }
  74. public void user()
  75. {
  76. int c,d,i;
  77. char g2,g3[];
  78. try
  79. {
  80. do
  81. {
  82. rivi2="";
  83. sendaa=1;
  84. do
  85. {
  86. c = System.in.read();
  87. g2=(char)c;
  88. rivi2=rivi2+g2;
  89. }
  90. while ( c != (int)'\n' );
  91. if (rivi2!=null)
  92. {
  93. rivi2s=rivi2.substring(0,1);
  94. if (rivi2s.equals("/"))
  95. {
  96. sendaa=1;
  97. rivi2=rivi2.substring(1,rivi2.length());
  98. if (rivi2.length()>3)
  99. {
  100. rivi2n=rivi2.substring(0,3);
  101. if (rivi2n.equals("to ") || rivi2n.equals("TO "))
  102. {
  103. rchan=rivi2.substring(3,rivi2.length()-2);
  104. System.out.println("Output channel set to "+rchan);
  105. sendaa=0;
  106. }
  107. }
  108. if (rivi2.length()>5)
  109. {
  110. rivi2n=rivi2.substring(0,5);
  111. if (rivi2n.equals("join ") || rivi2n.equals("JOIN "))
  112. {
  113. rchan=rivi2.substring(5,rivi2.length()-2);
  114. }
  115. }
  116. }
  117. else
  118. {
  119. rivi2temp=rivi2;
  120. rivi2="PRIVMSG "+rchan+" :"+rivi2temp;
  121. System.out.print("<"+nick+":"+rchan+"> "+rivi2temp);
  122. if (rchan.equals("<>"))
  123. {
  124. System.out.println("Please join channel first.");
  125. sendaa=0;
  126. }
  127. }
  128. g3=new char[rivi2.length()];
  129. g3=rivi2.toCharArray();
  130. if (sendaa==1) for (i=0;i<rivi2.length();i++)
  131. {
  132. d=(int)g3[i];
  133. out.write(d);
  134. out.flush();
  135. }
  136. }
  137. }
  138. while ( c != -1 );
  139. }
  140. catch (IOException e)
  141. {
  142. System.err.println("IOException: " + e.getMessage());
  143. }
  144. }
  145. public void server()
  146. {
  147. int c, old_c;
  148. char g;
  149. try
  150. {
  151. do
  152. {
  153. c=0;
  154. do
  155. {
  156. old_c = c;
  157. c = in.read();
  158. g=(char)c;
  159. rivi=rivi+g;
  160. }
  161. while (c != -1 && (old_c != (int)'\r' || c != (int)'\n') );
  162. if (rivi.equals("PING :"+ircserver))
  163. {
  164. }
  165. if (rivi.length() > (ircserver.length()+7+nick.length()))
  166. {
  167. rivis=rivi.substring(1,ircserver.length()+1);
  168. rivin=rivi.substring(ircserver.length()+6,ircserver.length()+6+nick.length());
  169. if (rivis.equals(ircserver)) if (rivin.equals(nick))
  170. {
  171. rivitemp=rivi.substring(ircserver.length()+7+nick.length(),rivi.length());
  172. rivi=rivitemp;
  173. }
  174. }
  175. //:cujo_!~cujo@b-194-136.cable.kpy.dnainternet.fi MODE #testaus2 +ni
  176. //:cujo_!~cujo@b-194-136.cable.kpy.dnainternet.fi MODE #testaus2 +o random604
  177. if (rivi.indexOf("MODE")>0)
  178. {
  179. if (rivi.length()>2*nick.length()+10)
  180. {
  181. mode=rivi.substring(1,2*nick.length()+11);
  182. if (mode.equals(nick+" MODE "+nick+" :+i")) rivi="Your client mode is now invisible.\n";
  183. }
  184. if (rivi.length()>40)
  185. {
  186. rivis=rivi.substring(rivi.indexOf("MODE")+5,rivi.length());
  187. if (rivis.indexOf("-")>0) mode="-";
  188. if (rivis.indexOf("+")>0) mode="+";
  189. rivitemp=rivis.substring(0,rivis.indexOf(mode)-1); // chan
  190. rivin=rivis.substring(rivis.indexOf(mode),rivis.length()); //mode
  191. rivig=rivi.substring(1,rivi.indexOf("!")); // didnick
  192. rivi=rivig+" sets "+rivitemp+" mode: "+rivin;
  193. }
  194. }
  195. if (rivi.indexOf("End of WHOIS list.")>0) tulosta=0;
  196. if (rivi.indexOf("End of NAMES list.")>0) tulosta=0;
  197. if (rivi.indexOf(" PONG ")>0) tulosta=0;
  198. if (rivi.indexOf("JOIN")>0)
  199. {
  200. chan=rivi.substring(rivi.indexOf(":#")+1,rivi.length());
  201. rivis=rivi.substring(1,rivi.indexOf("!"));
  202. if (rivis.equals(nick)) rivi="You joined "+chan;
  203. else rivi=rivis+" joined "+chan;
  204. }
  205. if (rivi.indexOf("PART")>0)
  206. {
  207. schan=rivi.substring(rivi.indexOf("PART")+1,rivi.length());
  208. rivitemp=schan.substring(4,schan.indexOf(":")-1);
  209. schan=rivitemp;
  210. rivis=rivi.substring(1,rivi.indexOf("!"));
  211. if (rivis.equals(nick)) rivi="You parted "+schan+"\n";
  212. else rivi=rivis+" parted "+schan+"\n";
  213. }
  214. if (rivi.indexOf("KICK")>0)
  215. {
  216. schan=rivi.substring(rivi.indexOf("KICK")+5,rivi.length());
  217. rivitemp=schan.substring(0,schan.indexOf(" ")-1);
  218. rivis=schan.substring(schan.indexOf(" ")+1,schan.indexOf(":")-1);
  219. rivin=schan.substring(schan.indexOf(":")+1,schan.length());
  220. schan=rivitemp;
  221. rivitemp=rivi.substring(1,rivi.indexOf("!"));
  222. if (rivis.equals(nick)) rivi="You were kicked from "+schan+" by "+rivitemp+" with msg "+rivin;
  223. else rivi=rivis+" was kicked from "+schan+" by "+rivitemp+" with msg "+rivin;
  224. }
  225. if (rivi.indexOf("PRIVMSG")>0)
  226. {
  227. rivis=rivi.substring(rivi.indexOf("PRIVMSG")+8,rivi.length());
  228. rivitemp=rivis.substring(0,rivis.indexOf(":")-1);
  229. rivin=rivis.substring(rivis.indexOf(":")+1,rivis.length());
  230. rivis=rivi.substring(1,rivi.indexOf("!"));
  231. if (rivitemp.equals(nick)) rivi="<"+rivis+":PM> "+rivin;
  232. else rivi="<"+rivis+":"+rivitemp+"> "+rivin;
  233. }
  234. if (rivi.indexOf("NOTICE")>0)
  235. {
  236. rivis=rivi.substring(rivi.indexOf("NOTICE")+7,rivi.length());
  237. rivitemp=rivis.substring(0,rivis.indexOf(":")-1);
  238. rivin=rivis.substring(rivis.indexOf(":")+1,rivis.length());
  239. //rivis=rivi.substring(1,rivi.indexOf("!"));
  240. if (rivitemp.equals(nick)) rivi="<"+rivis+":NOTICE> "+rivin;
  241. else rivi="<"+rivis+":"+rivitemp+"> "+rivin;
  242. }
  243. if (rivi.indexOf("TOPIC")>0)
  244. {
  245. rivis=rivi.substring(rivi.indexOf("TOPIC")+6,rivi.length());
  246. rivitemp=rivis.substring(0,rivis.indexOf(":")-1); //chan
  247. rivin=rivis.substring(rivis.indexOf(":")+1,rivis.length()); // topic
  248. rivis=rivi.substring(1,rivi.indexOf("!")); //didnick
  249. if (rivis.equals(nick)) rivi="You change "+rivitemp+" topic to: "+rivin;
  250. else rivi=rivis+" changes "+rivitemp+" topic to: "+rivin;
  251. }
  252.  
  253. //cujo_ 234 :seconds idle
  254. if (tulosta==1) System.out.print(rivi);
  255. tulosta=1;
  256. rivi="";
  257. rivitemp="";
  258. //System.out.write(buf, 0, i);
  259. System.out.flush();
  260. }
  261. while ( c != -1 );
  262. }
  263. catch (IOException e)
  264. {
  265. System.err.println("IOException: " + e.getMessage());
  266. }
  267. }
  268. public void run()
  269. {
  270. if ( Thread.currentThread().getName().equals("User") ) this.user();
  271. else this.server();
  272. }
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement